﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RastinArgham.CRM.Business;
using Mani.Common.Security;

namespace RastinArgham.CRM.Web
{
    public partial class oops : System.Web.UI.Page
    {
        public CRMRepository crmRepository { get; set; }
        public ISecurityManager securityManager { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            lblErrorFriendlyDetail.Visible = false;

            try
            {
                if (securityManager == null)
                {
                    securityManager = new SecurityManager();
                    securityManager.authProvider = new WebAuthorizationProvider();
                }

                if (crmRepository == null)
                    crmRepository = new CRMRepository();

                if (!Page.IsPostBack)
                {
                    Exception lastException = Server.GetLastError();

                    if (lastException == null)
                        return;

                    ErrorLog el = new ErrorLog();
                    el.ErrorPath = Request.Url.ToString();
                    el.ExceptionDetails = lastException.ToString();
                    el.ExceptionMessage = lastException.Message;
                    el.UserAgent = Request.UserAgent;
                    el.CreateDate = DateTime.Now;
                    el.Username = this.User.Identity.Name;

                    aspnet_Users user = securityManager.authProvider.GetCurrentUser();
                    if (user != null)
                        el.UserId = user.UserId;

                    crmRepository.AddErrorLog(el);
                    crmRepository.Save();

                    // Generating friendly error messages for most frequent errors.
                    if (el.ExceptionDetails.Contains("Maximum request length exceeded"))
                    {
                        lblErrorFriendlyDetail.Text = "کاربر گرامی تصویری که قصد ذخیره کردن آن را دارید حجمی بزرگتر از حداکثر حجم مجاز دارد لطفا از تصاویر سنگین تر از سیصد کیلوبایت استفاده نفرمایید.";
                        lblErrorFriendlyDetail.Visible = true;
                    }
                    else if (el.ExceptionDetails.Contains("Request timed out"))
                    {
                        lblErrorFriendlyDetail.Text = "اجرای درخواست شما بیش از حداکثر مجاز طول کشید لطفا مجددا تلاش کنید. این مشکل می تواند به دلیل کند بودن ارتباط شبکه یا اینترنت، شلوغ بودن سرور یا آپلود عکس سنگین پیش بیاید.";
                        lblErrorFriendlyDetail.Visible = true;
                    }
                    else if (el.ExceptionDetails.Contains("Invalid viewstate"))
                    {
                        lblErrorFriendlyDetail.Text = "کاربر گرامی لطفا از بکار بردن دکمه بازگشت در مرورگر خودداری فرمایید و از لینک های سامانه استفاده فرمایید تا با خطای نرم افزار مواجه نشوید";
                        lblErrorFriendlyDetail.Visible = true;
                    }
                    else if (el.ExceptionDetails.Contains("The E-mail address is already in use."))
                    {
                        lblErrorFriendlyDetail.Text = "لطفا از آدرس ایمیل دیگری استفاده کنید این آدرس قبلا به کاربر دیگری اختصاص یافته است";
                        lblErrorFriendlyDetail.Visible = true;
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.Write(ex.ToString());
            }
        }
    }
}